package md5;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import common.Base64;

public class MD5Encrypt {
	public static void main(String[] args) {
		String str = "1234567890";
		MD5Encrypt md5 = new MD5Encrypt();
		try {
			System.out.println("明文：" + str);
			System.out.println("base64字符串：" + md5.Md5toBase64(str));
			System.out.println("16进制字符串：" + md5.Md5toHex(str));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
	/**利用MD5进行加密返回base64字符串
	 * @param str  待加密的字符串
	 * @return  加密后的字符串
	 * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法
	 * @throws UnsupportedEncodingException  
	*/
	public String Md5toBase64(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
		//确定计算方法
		MessageDigest md5=MessageDigest.getInstance("MD5");
		//加密后的字符串
		String newstr=Base64.encode(md5.digest(str.getBytes("utf-8")));
		return newstr;
	}
	
	/**利用MD5进行加密返回16进制字符串
	 * @param str  待加密的字符串
	 * @return  加密后的字符串
	 * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法
	 * @throws UnsupportedEncodingException  
	*/
	public String Md5toHex(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{
		//确定计算方法
		MessageDigest md5=MessageDigest.getInstance("MD5");
		//加密后的字符串
		String newstr=toHex(md5.digest(str.getBytes("utf-8")));
		return newstr;
	}
	
	
	static String toHex(byte[] buf) {
		char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
		StringBuffer strBuf = new StringBuffer();
	         
		for (byte b : buf) {
			char c = hexDigits[(b >>> 4) & 0xf];
			strBuf.append(c);
			c = hexDigits[b & 0xf];
			strBuf.append(c);
		}
		return strBuf.toString();
	}
}
